package ebj.common.document_create.pdf.demo;

import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactoryImp;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;

/**
 * 字体 我们项目文书字体比较特殊，比如用到了宋体（99%都这个吧）、华文仿宋（安装office后自带）、仿宋_GB2312等，于是就研究了一下pdf字体，
 * 网上有很多方法使用中文字体，其实5.0版以后的iText加入字体还是很方便的。
 * 
 * @author zhangwd
 * @version 1.0
 * 
 */
public class PdfDemo_2 {

    public static void create() throws Exception {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream("D:/tmp/documents/demo.2.pdf"));
        String title = "凉州词";
        String content = "黄河远上白云间，一片孤城万仞山。羌笛何须怨杨柳，春风不度玉门关。";
        document.open();
        document.add(new Paragraph(title, getFont("方正兰亭黑简体")));
        document.add(new Paragraph(content, getFont("迷你简娃娃篆")));
        document.close();
        writer.close();
    }

    private static Font getFont(String fontName) {
        // xmlworker主要功能是html转pdf用的，非常好用，也是itext官方的

        // 这个是xmlworker提供的获取字体方法，很方便，对中文支持很好
        FontFactoryImp fp = new XMLWorkerFontProvider();
        // 注册指定的字体目录，默认构造方法中会注册全部目录，我这里注册了src/font目录
        fp.registerDirectory(
                PdfDemo_2.class.getClassLoader().getResource("font").getFile(),
                true);

        // 最好的地方是直接支持获取中文的名字
        return fp.getFont(fontName);

        // 当然，最好的方法是自己继承XMLWorkerFontProvider，提供一些常用字体，简单方便
    }

    public static void main(String[] args) throws Exception {
        create();
    }
}